const fs = require('fs')
const path = require('path')

// 解析命令行参数
const args = process.argv.slice(2)
const serverIP = args[0] || 'localhost'

console.log('📊 开始打包统计服务...')
console.log(`🌐 目标服务器: ${serverIP}`)

// 读取配置文件
const configPath = path.join(__dirname, 'script/analytics-config.json')
let config = {}

try {
    if (fs.existsSync(configPath)) {
        config = JSON.parse(fs.readFileSync(configPath, 'utf-8'))
        console.log('✅ 已加载配置文件')
        
        // 动态替换服务器地址
        if (config.analytics.baseUrl.includes('{SERVER_IP}')) {
            config.analytics.baseUrl = config.analytics.baseUrl.replace('{SERVER_IP}', serverIP)
            console.log(`🔄 已设置服务器地址: ${config.analytics.baseUrl}`)
        }
    } else {
        console.log('⚠️  配置文件不存在，使用默认配置')
        config = {
            server: { port: 3001, host: '0.0.0.0' },
            analytics: { baseUrl: `http://${serverIP}:3001` }
        }
    }
} catch (error) {
    console.error('❌ 读取配置文件失败:', error)
    process.exit(1)
}

// 创建临时打包目录
const packageDir = path.join(__dirname, 'analytics-package')
if (fs.existsSync(packageDir)) {
    fs.rmSync(packageDir, { recursive: true, force: true })
}
fs.mkdirSync(packageDir, { recursive: true })

// 复制统计服务文件（排除数据文件）
const filesToCopy = [
    'script/analytics-server.js',
    'script/analytics-config.json',  // 包含配置文件
    // 'script/analytics-data.json',  // 排除数据文件，避免覆盖服务器数据
    'package.json'
    // 'package-lock.json'  // 移除对 package-lock.json 的依赖
]

console.log('📦 复制文件...')
filesToCopy.forEach(file => {
    const srcPath = path.join(__dirname, file)
    const destPath = path.join(packageDir, file)
    
    if (fs.existsSync(srcPath)) {
        // 创建目标目录
        const destDir = path.dirname(destPath)
        if (!fs.existsSync(destDir)) {
            fs.mkdirSync(destDir, { recursive: true })
        }
        
        // 复制文件
        fs.copyFileSync(srcPath, destPath)
        console.log(`✅ 复制: ${file}`)
    } else {
        console.log(`⚠️  文件不存在: ${file}`)
    }
})

// 创建启动脚本
console.log('🔧 创建启动脚本...')
const startScript = `#!/bin/bash
# 统计服务启动脚本

echo "📊 启动虚谷统计服务..."

# 检查 Node.js
if ! command -v node &> /dev/null; then
    echo "❌ Node.js 未安装"
    exit 1
fi

# 安装依赖
echo "📦 安装依赖..."
npm install --production

# 创建日志目录
sudo mkdir -p /var/log
sudo touch /var/log/xugudb-analytics.log
sudo chown $USER:$USER /var/log/xugudb-analytics.log

# 启动统计服务
echo "📊 启动统计服务..."
nohup node script/analytics-server.js > /var/log/xugudb-analytics.log 2>&1 &
ANALYTICS_PID=$!
echo $ANALYTICS_PID > /tmp/xugudb-analytics.pid
echo "📊 统计服务已启动 (PID: $ANALYTICS_PID)"
echo "📊 服务地址: ${config.analytics.baseUrl}"
echo "📊 日志文件: /var/log/xugudb-analytics.log"
echo ""
echo "停止服务: ./stop.sh"
echo "查看日志: tail -f /var/log/xugudb-analytics.log"
`

const stopScript = `#!/bin/bash
# 统计服务停止脚本

echo "🛑 停止虚谷统计服务..."

# 停止统计服务
if [ -f /tmp/xugudb-analytics.pid ]; then
    ANALYTICS_PID=$(cat /tmp/xugudb-analytics.pid)
    if kill -0 $ANALYTICS_PID 2>/dev/null; then
        kill $ANALYTICS_PID
        echo "📊 统计服务已停止 (PID: $ANALYTICS_PID)"
    else
        echo "📊 统计服务未运行"
    fi
    rm -f /tmp/xugudb-analytics.pid
fi

echo "✅ 统计服务已停止！"
`

const restartScript = `#!/bin/bash
# 统计服务重启脚本

echo "🔄 重启虚谷统计服务..."

# 停止服务
./stop.sh

# 等待一秒
sleep 1

# 启动服务
./start.sh

echo "✅ 统计服务已重启！"
`

// 写入脚本文件
fs.writeFileSync(path.join(packageDir, 'start.sh'), startScript)
fs.writeFileSync(path.join(packageDir, 'stop.sh'), stopScript)
fs.writeFileSync(path.join(packageDir, 'restart.sh'), restartScript)

// 创建 README
const readme = `# 虚谷统计服务部署包

## 📊 服务说明

这是一个独立的统计服务部署包，提供页面访问统计功能。

- **服务端口**: ${config.server.port}
- **API 地址**: ${config.analytics.baseUrl}
- **日志文件**: /var/log/xugudb-analytics.log

## 🚀 快速启动

\`\`\`bash
# 启动统计服务
./start.sh

# 停止统计服务
./stop.sh

# 重启统计服务
./restart.sh
\`\`\`

## 📁 文件结构

\`\`\`
.
├── script/
│   ├── analytics-server.js      # 统计服务主程序
│   └── analytics-config.json    # 配置文件
├── package.json                 # 依赖配置
├── start.sh                     # 启动脚本
├── stop.sh                      # 停止脚本
├── restart.sh                   # 重启脚本
└── README.md                    # 说明文档
\`\`\`

## 🔧 手动启动

\`\`\`bash
# 安装依赖
npm install --production

# 启动服务
nohup node script/analytics-server.js > /var/log/xugudb-analytics.log 2>&1 &
\`\`\`

## 📈 API 接口

### 获取统计数据
\`\`\`
GET /api/stats
\`\`\`

### 获取热门页面
\`\`\`
GET /api/popular-pages
\`\`\`

### 记录页面访问
\`\`\`
POST /api/page-view
Content-Type: application/json

{
  "path": "/page-path",
  "title": "页面标题"
}
\`\`\`

## 📋 服务器要求

- **操作系统**: Linux (推荐 Ubuntu 20.04+)
- **Node.js**: 16.x 或更高版本
- **内存**: 至少 512MB RAM
- **磁盘空间**: 至少 100MB 可用空间
- **端口**: ${config.server.port}

## 🔒 安全配置

### 防火墙设置
\`\`\`bash
# 允许统计服务端口
sudo ufw allow ${config.server.port}
\`\`\`

## 📈 监控和维护

### 查看日志
\`\`\`bash
# 实时查看日志
tail -f /var/log/xugudb-analytics.log

# 查看最近100行日志
tail -n 100 /var/log/xugudb-analytics.log
\`\`\`

### 检查服务状态
\`\`\`bash
# 检查进程
ps aux | grep analytics-server

# 检查端口
netstat -tlnp | grep :${config.server.port}
\`\`\`

## 💾 数据管理

### 数据文件位置
- **数据文件**: \`script/analytics-data.json\`
- **自动创建**: 统计服务启动时如果数据文件不存在会自动创建

### 备份数据
\`\`\`bash
# 手动备份
cp script/analytics-data.json /tmp/analytics-data-backup-\$(date +%Y%m%d-%H%M%S).json

# 恢复数据
cp /tmp/analytics-data-backup-20250804-143000.json script/analytics-data.json
\`\`\`

## ⚙️ 配置说明

### 配置文件位置
\`script/analytics-config.json\`

### 主要配置项
- **baseUrl**: 统计服务的基础URL (当前: ${config.analytics.baseUrl})
- **port**: 服务端口 (当前: ${config.server.port})

### 修改配置
部署后可以通过编辑 \`script/analytics-config.json\` 来修改配置，然后重启服务。

### 修改服务器地址
如果需要修改服务器地址，请编辑配置文件中的 \`analytics.baseUrl\` 字段：
\`\`\`json
{
  "analytics": {
    "baseUrl": "http://your-server-ip:3001"
  }
}
\`\`\`
`

fs.writeFileSync(path.join(packageDir, 'README.md'), readme)

// 创建压缩包
const { execSync } = require('child_process')
console.log('📦 创建压缩包...')
execSync(`cd ${packageDir} && tar -czf ../xugudb-analytics.tar.gz .`, { stdio: 'inherit' })

// 清理临时目录
fs.rmSync(packageDir, { recursive: true, force: true })

console.log('✅ 统计服务打包完成！')
console.log('📦 部署包: xugudb-analytics.tar.gz')
console.log(`🌐 服务地址: ${config.analytics.baseUrl}`)
console.log('🚀 部署命令: npm run deploy:analytics <服务器IP> <用户名> <部署路径>')
console.log('💡 提示: 可以通过传递服务器IP参数来自动设置地址')
console.log('   示例: node package-analytics.js 192.168.2.242') 